package com.geline.easytrans.util;

import org.springframework.expression.ExpressionParser;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * SpEL 条件表达式工具类
 *
 * @author mx
 * @date 2025/9/10
 */
public class ExpressionParserUtils {

    /**
     * 执行 JavaScript 条件表达式
     *
     * @param obj       对象
     * @param condition 条件表达式
     * @return true/false
     */
    public static <T> boolean executeSpEL(T obj, String condition) {
        // 创建 SpEL 解析器
        ExpressionParser parser = new SpelExpressionParser();
        //obj不支持Map，必须为Bean对象
        StandardEvaluationContext context = new StandardEvaluationContext(obj);

        // 添加字段别名（可选）
        //context.setVariable("amount", order.getAmount());

        // 执行条件表达式（语法类似 JavaScript）
        //String condition = "orderType == 'CG' and amount > 100 and status == 'NEW'";
        Boolean result = parser.parseExpression(condition).getValue(context, Boolean.class);
        return Boolean.TRUE.equals(result);
    }
}
